![Glue DataBrewで出力ファイルがどのように分割されるのか試してみた](https://devio2023-media.developers.io/wp-content/uploads/2019/04/aws-glue.png)
Glue DataBrewで出力ファイルがどのように分割されるのか試してみた
こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。
先日発表された、ビジュアルデータ準備サービス「AWS Glue DataBrew」にとても興味があり、下記エントリを参考に触っています。
その中で気になった「ファイルの出力単位」を少し調べてみましたので、まとめてみます。
ファイルの出力について
DataBrewの「ジョブ」の設定では「ジョブ出力設定」にこんな注意書きがあります。
出力ファイルが大きすぎる場合、出力ファイルはパーティション分割されます。
出力ファイル数やサイズについては、2020/11/18現在は特に設定がなく、どのようになるのか色々と試してみました。
抽出対象データ
サンプルデータの「メトロポリタン美術館コレクション(dataset-met-objects)」から、カラム「credit line」以外を削除して、「重複なし」の処理をしたレシピを通しています。
色々なパターンでの出力を試す
以下のパターンで試してみました。また、ジョブに設定する「ユニットの最大数」は「2」としています。
ファイルタイプ | 圧縮 |
---|---|
CSV | None |
CSV | Gzip |
CSV | Deflate |
PARQUET | Snappy |
GLUEPARQUET | Snappy |
XML | None |
JSON | None |
JSON | Gzip |
JSON | Deflate |
出力結果まとめ
ジョブを実行した結果、S3に保存された「ファイル数」と、分割されたファイルをダウンロードした際の「1ファイルのバイト数」が以下となりました!
ファイルタイプ | 圧縮 | ファイル数 | 1ファイルのバイト数 |
---|---|---|---|
CSV | None | 16 | 10246 |
CSV | Gzip | 16 | 3730 |
CSV | Deflate | 16 | 3718 |
PARQUET | Snappy | 16 | 6605 |
GLUEPARQUET | Snappy | 16 | 6415 |
XML | None | 16 | 18350 |
JSON | None | 16 | 13385 |
JSON | Gzip | 16 | 3879 |
JSON | Deflate | 16 | 3867 |
ファイル数はいずれも「16」ファイルとなっていました。ファイルサイズは「数KB」となっており、同一ファイル形式では単純に圧縮によるファイルサイズの変化がみられました。
例えば、JSONの非圧縮ファイルは「13385」バイトでGzip圧縮ファイルは「3879」バイトとなっていますが、Gzip圧縮ファイルを解凍したところ、当然ですが非圧縮ファイルと同じjsonファイルですので「13385」バイトとなります。
また、どのファイルにおいてもヘッダ行の有無などはありますが、実データとしては「197レコード分」の出力となっているように見受けられました。
また、「ユニットの最大数」も関係していそうと思われたので、今度は「ユニットの最大数」を「16」にして試したところ、すべて「ファイル数」は「43」ファイル(74レコード分の出力)となりました。およそ2.7倍に増えましたね。
まとめ
色々なパターンでのファイル出力を試してみましたが、今回試したパターンではファイル数は「16~43」、ファイルサイズは「数KB程度」にファイル分割されていました。色々と分割条件はありそうですが、いずれにせよある程度のファイル数に分割して出力されることは間違いなさそうなので、そのあたりは利用の際に考慮が必要かなと思いました。
どなたかのお役に立てば幸いです。それでは!